home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue56 / System / RASDevices.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  2000-03-04  |  2.3 KB  |  85 lines

  1. unit RASDevices;
  2.  
  3. interface
  4.  
  5. uses
  6.     Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, RASBase;
  7.  
  8. type
  9.     TRASDeviceManager = class (TRASBaseComponent)
  10.     private
  11.         { Private declarations }
  12.         fDeviceNames, fDeviceTypes, fDummy2: TStrings;
  13.     protected
  14.         { Protected declarations }
  15.     public
  16.         { Public declarations }
  17.         constructor Create (AOwner: TComponent); override;
  18.         destructor Destroy; override;
  19.         procedure Refresh;
  20.     published
  21.         { Published declarations }
  22.         property DeviceNames: TStrings read fDeviceNames write fDummy2 stored False;
  23.         property DeviceTypes: TStrings read fDeviceTypes write fDummy2 stored False;
  24.     end;
  25.  
  26. procedure Register;
  27.  
  28. implementation
  29.  
  30. constructor TRASDeviceManager.Create (AOwner: TComponent);
  31. begin
  32.     Inherited Create (AOwner);
  33.     fDeviceNames := TStringList.Create;
  34.     fDeviceTypes := TStringList.Create;
  35.     Refresh;
  36. end;
  37.  
  38. destructor TRASDeviceManager.Destroy;
  39. begin
  40.     fDeviceNames.Free;
  41.     fDeviceTypes.Free;
  42.     Inherited;
  43. end;
  44.  
  45. procedure TRASDeviceManager.Refresh;
  46. type
  47.     TRasDevInfo = record
  48.     dwSize: DWORD;
  49.     DeviceType: array [0..16] of Char;
  50.     DeviceName: array [0..128] of Char;
  51.     end;
  52. var
  53.     CurDev: ^TRasDevInfo;
  54.     Buffer: array [0..10000] of Char;
  55.     Idx, BufSize, NumDevices: Integer;
  56.     RasEnumDevices: function (Buffer: PChar; var BufSize,
  57.                               NumDevices: Integer): Integer; stdcall;
  58. begin
  59.     if Available then begin
  60.         // First off, refresh the entries list
  61.         fDeviceNames.Clear;
  62.         fDeviceTypes.Clear;
  63.         RasEnumDevices := GetProc ('RasEnumDevicesA');
  64.         if Assigned (RasEnumDevices) then begin
  65.             CurDev := @Buffer;
  66.             CurDev^.dwSize := sizeof (TRasDevInfo);
  67.             BufSize := sizeof (Buffer);
  68.             if CallProc (RasEnumDevices (Buffer, BufSize, NumDevices)) then
  69.                 for Idx := 0 to NumDevices - 1 do begin
  70.                     fDeviceTypes.Add (CurDev^.DeviceType);
  71.                     fDeviceNames.Add (CurDev^.DeviceName);
  72.                     Inc (CurDev);
  73.                 end;
  74.         end;
  75.     end;
  76. end;
  77.  
  78. procedure Register;
  79. begin
  80.     RegisterComponents ('DelphiMag', [TRASDeviceManager]);
  81. end;
  82.  
  83. end.
  84.  
  85.